def sep(label=''):
    '''Utility function to print separator lines.'''
    print('-' * 16, label, '-' * 16, sep='')


# 1．创建一个函数randStr，生成指定长度的随机字符串：（4分）
# （1）参数：len，整型；指定随机字符串的长度；
# （2）返回值：随机字符串；
# （3）功能描述：在调用该函数时，需要传递一个整型值，该值决定了生成的随机字符串的长度；最后，将生成的随机字符串返回；
sep(1)
print('1．创建一个函数randStr，生成指定长度的随机字符串：（4分）')
import string
import random
rand_str_src = string.ascii_letters + string.digits


def randStr(len):
    '''
    生成指定长度的随机字符串
    :param len: 整型；指定随机字符串的长度
    :return: 随机字符串
    '''
    len = int(len)
    if len <= 0:
        return ''
    return ''.join(random.choices(rand_str_src, k=len))


print(randStr(6))

# 2．创建一个函数login，验证用户名是否为“admin”、密码是否为“123”；（4分）
# （1）参数1：uname，字符串；用户名。
# （2）参数2：upassword，字符串；密码。
# （3）返回值：用户名和密码的验证结果，布尔类型；
# ①如果用户名和密码正确，则该函数返回True；
# ②如果用户名或密码不正确，则该函数返回False；
# （4）功能描述：调用该函数时，传递两个参数：用户名和密码；在该函数中验证传递过来的用户名、密码是否正确；如果用户名和密码都正确，则返回True；如果用户名或密码不正确，则返回False；
sep(2)
print('2．创建一个函数login，验证用户名是否为“admin”、密码是否为“123”；（4分）')


def login(uname, upassword):
    '''
    验证用户名是否为“admin”、密码是否为“123”
    :param uname: uname，字符串；用户名
    :param upassword: upassword，字符串；密码
    :return: 用户名和密码的验证结果，布尔类型
    '''
    if 'admin' != uname:
        return False
    if '123' != upassword:
        return False
    return True


print('login("admin", "123"):', login('admin', '123'))
print('login("ad", "123"):', login('ad', '123'))
print('login("admin", "1234"):', login('admin', '1234'))
print('login("ad", "1234"):', login('ad', '1234'))

# 3．创建一个函数add，对任意多个整型参数求和：（4分）
# （1）参数：非关键字变长参数；
# （2）返回值：求和后的结果；
# （3）功能描述：该函数能够接收任意多个整型值，在该函数中对传递过来的任意参数值求和；最后，将求和后的结果返回；
sep(3)
print('3．创建一个函数add，对任意多个整型参数求和：（4分）')


def add(*args):
    '''
    对任意多个整型参数求和
    :param args: 非关键字变长参数
    :return: 求和后的结果
    '''
    return sum(args)


print(f'add(1, 2, 3, 4) = {add(1, 2, 3, 4)}')

# 4．添加主程序入口，完成如下任务：（18）
sep(4)
print('4．添加主程序入口，完成如下任务：（18）')
if '__main__' == __name__:
    # （1）创建一个列表，alist；（1分）
    alist = []

    # （2）调用randStr，将生成的随机字符串添加到alist；（4分）
    alist.append(randStr(4))

    # （3）显示alist；（1分）
    print(f'{alist!r}')

    # （4）在终端输入“admin”和“123”，分别保存到uname和upwd；（2分）
    uname = input('请输入用户名：')
    upwd = input('请输入密码：')

    # （5）将参数传递给login，接收函数的返回结果；（4分）
    # ①如果返回结果为True，则提示“登陆成功”；
    # ②如果返回结果为False，则提示“登陆失败”；
    xresult = login(uname, upwd)
    if xresult:
        print('登陆成功')
    else:
        print('登陆失败')

    # （6）调用add函数，分别传递4、5，显示计算结果（2分）
    print(f'add(4, 5) = {add(4, 5)}')

    # （7）调用add函数，分别传递2、3、4，显示计算结果（2分）
    print(f'add(2, 3, 4) = {add(2, 3, 4)}')

    # （8）调用add函数，分别传递8、7、6、5，显示计算结果（2分）
    print(f'add(8, 7, 6, 5) = {add(8, 7, 6, 5)}')
